package mx.ipn.presentacion.empleado;

import com.trolltech.qt.core.QDate;
import com.trolltech.qt.gui.QBrush;
import com.trolltech.qt.gui.QColor;
import com.trolltech.qt.gui.QCalendarWidget;
import com.trolltech.qt.gui.QTextCharFormat;
import com.trolltech.qt.gui.QWidget;

import mx.ipn.presentacion.ConexionConNegocios;
import mx.ipn.presentacion.Utilerias;
import mx.ipn.to.DiaFestivoTO;

import mx.ipn.to.TransferObject;

import mx.ipn.presentacion.empleado.ui.*;

public class ComportamientoDiaFestivo2 extends QWidget {
	Ui_Empleado2 empleado = null;

	String titulo;
	boolean banderaBaja = false;
	boolean banderaModificar = false;
	boolean banderaConsulta = false;
	boolean eventoBotonValor = false;
	Ui_DiaFestivo2 diaFestivo = null;
	DiaFestivoTO[] arrDiaFestivoTO = null;
	DiaFestivoTO diaFestivoTO = null;

	public void agregarDiaFestivo(Ui_EmpleadoPrincipal ui) {

		arrDiaFestivoTO = (DiaFestivoTO[]) ConexionConNegocios.invocaServicio(
				"encontrarDiasFestivosActivos", DiaFestivoTO[].class);
		if (arrDiaFestivoTO != null) {
			if (arrDiaFestivoTO[0].getTipoError() != 0) {
				Utilerias.mostrarMensajeError(this, arrDiaFestivoTO[0]);
			}
		}

		preparaVentana(ui);

		diaFestivo.pushButtonValorDFestivo.setText("A&gregar");
		if (eventoBotonValor == false) {
			diaFestivo.pushButtonValorDFestivo.clicked.connect(this,
					"botonAgregar()");
			eventoBotonValor = true;
		}

	}

	public void consultarDiaFestivo(Ui_EmpleadoPrincipal ui) {

		arrDiaFestivoTO = (DiaFestivoTO[]) ConexionConNegocios.invocaServicio(
				"encontrarDiasFestivosActivos", DiaFestivoTO[].class);

		if (arrDiaFestivoTO != null) {
			if (arrDiaFestivoTO[0].getTipoError() != 0) {
				Utilerias.mostrarMensajeError(this, arrDiaFestivoTO[0]);
			}
		}

		preparaVentana(ui);
		diaFestivo.groupBoxPropiedadesDFestivo.setEnabled(false);
		diaFestivo.pushButtonValorDFestivo.setVisible(false);
		diaFestivo.comboBoxDiaDFestivo.setEditable(true);
		diaFestivo.comboBoxMesDFestivo.setEditable(true);
	}

	public void bajaDiaFestivo(Ui_EmpleadoPrincipal ui) {

		arrDiaFestivoTO = (DiaFestivoTO[]) ConexionConNegocios.invocaServicio(
				"encontrarDiasFestivosActivos", DiaFestivoTO[].class);
		if (arrDiaFestivoTO != null) {
			if (arrDiaFestivoTO[0].getTipoError() != 0) {
				Utilerias.mostrarMensajeError(this, arrDiaFestivoTO[0]);
			}
		}

		preparaVentana(ui);

		diaFestivo.pushButtonValorDFestivo.setText("&Dar de Baja");
		if (eventoBotonValor == false) {
			diaFestivo.pushButtonValorDFestivo.clicked.connect(this,
					"botonBaja()");
			eventoBotonValor = true;
		}

		diaFestivo.groupBoxPropiedadesDFestivo.setEnabled(false);
		diaFestivo.comboBoxDiaDFestivo.setEditable(true);
		diaFestivo.comboBoxMesDFestivo.setEditable(true);

	}

	public void modificarDiaFestivo(Ui_EmpleadoPrincipal ui) {

		arrDiaFestivoTO = (DiaFestivoTO[]) ConexionConNegocios.invocaServicio(
				"encontrarDiasFestivosActivos", DiaFestivoTO[].class);
		if (arrDiaFestivoTO != null) {
			if (arrDiaFestivoTO[0].getTipoError() != 0) {
				Utilerias.mostrarMensajeError(this, arrDiaFestivoTO[0]);
			}
		}

		preparaVentana(ui);

		diaFestivo.pushButtonValorDFestivo.setText("&Modificar");
		if (eventoBotonValor == false) {
			diaFestivo.pushButtonValorDFestivo.clicked.connect(this,
					"botonModificar()");
			eventoBotonValor = true;
		}

		diaFestivo.groupBoxPropiedadesDFestivo.setEnabled(false);

	}

	public void preparaVentana(Ui_EmpleadoPrincipal ui) {
		if (diaFestivo == null) {
			diaFestivo = new Ui_DiaFestivo2();
			diaFestivo.setupUi(ui.centralwidget);
			diaFestivo.dockWidgetDiaFestivo.setHidden(false);
			ui.gridLayout.addWidget(diaFestivo.dockWidgetDiaFestivo);
			diaFestivo.dockWidgetDiaFestivo.setWindowTitle(titulo);
			limpiarDiaFestivo();

			eventosGenerales();

			bloqueaComponentes();

			diaFestivo.pushButtonCancelarDFestivo.clicked.connect(this,
					"botonCancelar()");

		} else
			diaFestivo.dockWidgetDiaFestivo.setHidden(false);

		diaFestivo.calendarWidgetMes1DFestivo.disconnect();
		dibujaCalendario();

		diaFestivo.calendarWidgetMes1DFestivo.clicked.connect(this,
				"clickCalendario(QDate)");
		diaFestivo.calendarWidgetMes1DFestivo.activated.connect(this,
				"clickCalendario(QDate)");
		diaFestivo.calendarWidgetMes1DFestivo.currentPageChanged.connect(this,
				"clickCalendarioPagina(int,int)");

	}

	public void limpiarDiaFestivo() {

		diaFestivo.textBrowserDescripcionDFestivo.disconnect();
		diaFestivo.comboBoxDiaDFestivo.disconnect();
		diaFestivo.comboBoxMesDFestivo.disconnect();

		diaFestivo.textBrowserDescripcionDFestivo.clear();
		diaFestivo.comboBoxMesDFestivo.setCurrentIndex(-1);
		diaFestivo.comboBoxDiaDFestivo.clear();
		diaFestivo.comboBoxMesDFestivo.setCurrentIndex(-1);
	}

	public void eventosGenerales() {
		diaFestivo.textBrowserDescripcionDFestivo.textChanged.connect(this,
				"cambioDescripcion()");
		diaFestivo.comboBoxMesDFestivo.currentIndexChanged.connect(this,
				"cambioComboMes(int)");
		diaFestivo.comboBoxDiaDFestivo.currentIndexChanged.connect(this,
				"cambioComboDia(int)");
	}

	public void bloqueaComponentes() {
		diaFestivo.comboBoxMesDFestivo.setEnabled(false);
		diaFestivo.comboBoxDiaDFestivo.setEnabled(false);
		diaFestivo.pushButtonValorDFestivo.setEnabled(false);
	}

	public void dibujaBasico(QCalendarWidget calendario, QDate fecha,
			QColor color) {
		QTextCharFormat formato = new QTextCharFormat();
		formato.setBackground(new QBrush(new QColor(color)));
		calendario.setDateTextFormat(fecha, formato);
	}

	public void dibujaCalendario() {
		QDate fecha = new QDate();
		QColor color = new QColor();
		color.setRgb(255, 109, 21);
		for (int x = 0; x < arrDiaFestivoTO.length; x++) {
			fecha.setDate(diaFestivo.calendarWidgetMes1DFestivo.yearShown(),
					arrDiaFestivoTO[x].getMes(), arrDiaFestivoTO[x].getDia());
			dibujaBasico(diaFestivo.calendarWidgetMes1DFestivo, fecha, color);
		}

	}

	public void cambioDescripcion() {
		int lon = diaFestivo.textBrowserDescripcionDFestivo.toPlainText()
				.replace(" ", "").length();
		if (lon > 0
				&& diaFestivo.textBrowserDescripcionDFestivo.isEnabled() == true) {
			diaFestivo.comboBoxMesDFestivo.setEnabled(true);
		} else {
			diaFestivo.comboBoxMesDFestivo.setEnabled(false);
		}
		emitirEstados();
	}

	public void cambioComboMes(int indice) {
		if (indice > -1 && diaFestivo.comboBoxMesDFestivo.isEnabled() == true) {
			llenarComboDia(diaFestivo.comboBoxMesDFestivo.currentIndex());
			diaFestivo.comboBoxDiaDFestivo.setEnabled(true);
		} else {
			diaFestivo.comboBoxDiaDFestivo.setEnabled(false);
		}
		emitirEstados();
	}

	public void cambioComboDia(int indice) {
		if (indice > -1 && diaFestivo.comboBoxDiaDFestivo.isEnabled() == true) {
			diaFestivo.pushButtonValorDFestivo.setEnabled(true);
		} else {
			diaFestivo.pushButtonValorDFestivo.setEnabled(false);
		}
	}

	public void clickCalendario(QDate fecha) {
		DiaFestivoTO enviarTO = new DiaFestivoTO();

		if (banderaModificar == true) {
			diaFestivo.groupBoxPropiedadesDFestivo.setEnabled(true);
		}

		enviarTO.setDia((short) fecha.day());
		enviarTO.setMes((short) fecha.month());

		diaFestivoTO = null;

		diaFestivoTO = (DiaFestivoTO) ConexionConNegocios.invocaServicio(
				"encontrarDiaFestivoPorMesDiaActivo", enviarTO,
				DiaFestivoTO.class);

		if (diaFestivoTO != null) {
			if (diaFestivoTO.getTipoError() == 0) {
				diaFestivo.textBrowserDescripcionDFestivo.setText(diaFestivoTO
						.getDescripcion());
				if (banderaConsulta == true || banderaBaja == true) {

					diaFestivo.pushButtonValorDFestivo.setEnabled(true);

					diaFestivo.comboBoxMesDFestivo.setCurrentIndex(fecha
							.month() - 1);
					diaFestivo.comboBoxDiaDFestivo.lineEdit().setText(
							String.valueOf(diaFestivoTO.getDia()));
				} else {

					diaFestivo.comboBoxMesDFestivo.setCurrentIndex(fecha
							.month() - 1);
					diaFestivo.comboBoxDiaDFestivo.disconnect();
					diaFestivo.comboBoxDiaDFestivo
							.setCurrentIndex(fecha.day() - 1);
					diaFestivo.comboBoxDiaDFestivo.currentIndexChanged.connect(
							this, "cambioComboDia(int)");
				}
			} else {
				if (banderaConsulta == true || banderaBaja == true)
					diaFestivo.pushButtonValorDFestivo.setEnabled(false);
				diaFestivo.textBrowserDescripcionDFestivo.clear();
				
				if (banderaModificar == true) {
					diaFestivo.groupBoxPropiedadesDFestivo.setEnabled(false);
				}
			}
			

		} else {
			if (banderaConsulta == true || banderaBaja == true
					|| banderaModificar == true)
				diaFestivo.pushButtonValorDFestivo.setEnabled(false);
			diaFestivo.textBrowserDescripcionDFestivo.clear();
		}
	}

	public void calendarioActivo(QDate fecha) {

	}

	public void clickCalendarioPagina(int uno, int dos) {
		dibujaCalendario();
	}

	public void botonCancelar() {
		diaFestivo.dockWidgetDiaFestivo.setHidden(true);
	}

	public void llenarComboDia(int mes) {
		int dias;
		if (mes == 0 || mes == 2 || mes == 4 || mes == 6 || mes == 7
				|| mes == 9 || mes == 11) {
			dias = 31;
		} else if (mes == 1) {
			/*
			 * QDate fechaa = new QDate(); int anio = fechaa.year();
			 * fechaa.setDate(2007, 2, 2);
			 */
			dias = 29;
		} else {
			dias = 30;
		}

		if (dias != diaFestivo.comboBoxDiaDFestivo.count()) {
			diaFestivo.comboBoxDiaDFestivo.disconnect();
			diaFestivo.comboBoxDiaDFestivo.clear();
			for (int x = 1; x <= dias; x++) {
				diaFestivo.comboBoxDiaDFestivo.addItem(String.valueOf(x));
			}
			diaFestivo.comboBoxDiaDFestivo.setCurrentIndex(-1);
			diaFestivo.comboBoxDiaDFestivo.currentIndexChanged.connect(this,
					"cambioComboDia(int)");
		}
	}

	public void emitirEstados() {
		if (banderaConsulta == false && banderaBaja == false) {
			diaFestivo.comboBoxMesDFestivo.currentIndexChanged
					.emit(diaFestivo.comboBoxMesDFestivo.currentIndex());
			diaFestivo.comboBoxDiaDFestivo.currentIndexChanged
					.emit(diaFestivo.comboBoxDiaDFestivo.currentIndex());
			diaFestivo.textBrowserDescripcionDFestivo.textChanged.emit();
		}
	}

	public void botonAgregar() {
		DiaFestivoTO enviarTO = new DiaFestivoTO();

		enviarTO.setDescripcion(diaFestivo.textBrowserDescripcionDFestivo
				.toPlainText());
		enviarTO
				.setMes((short) (diaFestivo.comboBoxMesDFestivo.currentIndex() + 1));
		enviarTO
				.setDia((short) (diaFestivo.comboBoxDiaDFestivo.currentIndex() + 1));
		enviarTO.setActivo(true);

		DiaFestivoTO respTO = (DiaFestivoTO) ConexionConNegocios
				.invocaServicio("agregarDiaFestivo", enviarTO,
						DiaFestivoTO.class);

		if (respTO != null) {
			if (respTO.getTipoError() > 0) {
				Utilerias.mostrarMensajeError(this, respTO);
			} else {
				bloqueaComponentes();
				respTO.setTipoError(TransferObject.INFO);
				Utilerias.mostrarMensajeError(this, respTO);
				limpiarDiaFestivo();
				eventosGenerales();

				arrDiaFestivoTO = null;

				arrDiaFestivoTO = (DiaFestivoTO[]) ConexionConNegocios
						.invocaServicio("encontrarDiasFestivosActivos",
								DiaFestivoTO[].class);

				diaFestivo.pushButtonValorDFestivo.setEnabled(false);

				preparaVentana(null);
			}
		} else {

		}

	}

	public void botonBaja() {
		DiaFestivoTO enviarTO = new DiaFestivoTO();

		enviarTO = diaFestivoTO;

		DiaFestivoTO respTO = (DiaFestivoTO) ConexionConNegocios
				.invocaServicio("bajaDiaFestivo", enviarTO, DiaFestivoTO.class);

		if (respTO != null) {
			if (respTO.getTipoError() > 0) {
				Utilerias.mostrarMensajeError(this, respTO);
			} else {
				bloqueaComponentes();
				respTO.setTipoError(TransferObject.INFO);
				Utilerias.mostrarMensajeError(this, respTO);
				limpiarDiaFestivo();
				eventosGenerales();

				arrDiaFestivoTO = null;

				arrDiaFestivoTO = (DiaFestivoTO[]) ConexionConNegocios
						.invocaServicio("encontrarDiasFestivosActivos",
								DiaFestivoTO[].class);

				diaFestivo.pushButtonValorDFestivo.setEnabled(false);

				preparaVentana(null);

				QDate fecha = new QDate();
				QColor color = new QColor();
				color.setRgb(255, 255, 255);
				fecha.setDate(
						diaFestivo.calendarWidgetMes1DFestivo.yearShown(),
						diaFestivoTO.getMes(), diaFestivoTO.getDia());
				dibujaBasico(diaFestivo.calendarWidgetMes1DFestivo, fecha,
						color);
			}
		} else {

		}

	}

	public void botonModificar() {
		DiaFestivoTO enviarTO = new DiaFestivoTO();

		enviarTO.setDescripcion(diaFestivo.textBrowserDescripcionDFestivo
				.toPlainText());
		enviarTO
				.setMes((short) (diaFestivo.comboBoxMesDFestivo.currentIndex() + 1));
		enviarTO
				.setDia((short) (diaFestivo.comboBoxDiaDFestivo.currentIndex() + 1));

		enviarTO.setActivo(true);

		enviarTO.setIdDiaFestivo(diaFestivoTO.getIdDiaFestivo());

		DiaFestivoTO respTO = (DiaFestivoTO) ConexionConNegocios
				.invocaServicio("modificarDiaFestivo", enviarTO,
						DiaFestivoTO.class);

		if (respTO != null) {
			if (respTO.getTipoError() > 0) {
				Utilerias.mostrarMensajeError(this, respTO);
			} else {
				bloqueaComponentes();
				respTO.setTipoError(TransferObject.INFO);
				Utilerias.mostrarMensajeError(this, respTO);
				limpiarDiaFestivo();
				eventosGenerales();

				arrDiaFestivoTO = null;

				QDate fecha = new QDate();
				QColor color = new QColor();
				color.setRgb(255, 255, 255);
				fecha.setDate(
						diaFestivo.calendarWidgetMes1DFestivo.yearShown(),
						diaFestivoTO.getMes(), diaFestivoTO.getDia());
				dibujaBasico(diaFestivo.calendarWidgetMes1DFestivo, fecha,
						color);

				arrDiaFestivoTO = (DiaFestivoTO[]) ConexionConNegocios
						.invocaServicio("encontrarDiasFestivosActivos",
								DiaFestivoTO[].class);

				diaFestivo.pushButtonValorDFestivo.setEnabled(false);

				preparaVentana(null);

			}
		} else {

		}

	}

}
